package leetcode_jz_offer.day7_bin_tree;

/**
 * 从根节点开始，递归地对树进行遍历，并从叶子节点先开始翻转得到镜像。
 * 如果当前遍历到的节点 root 的左右两棵子树都已经翻转得到镜像,那么我们只需要交换两棵子树的位置
 * 即可得到以root为根节点的整棵子树的镜像
 * 链接：https://leetcode.cn/problems/er-cha-shu-de-jing-xiang-lcof/solution/er-cha-shu-de-jing-xiang-by-leetcode-sol-z44i/
 **/
//输入一个二叉树，输出它的镜像
public class Num27_二叉树的镜像 {
    private class TreeNode {
      int val;
      TreeNode left;
      TreeNode right;
      TreeNode(int x) { val = x; }
    }
    //二叉树的镜像
    public TreeNode mirrorTree(TreeNode root) {
        if(root==null){
            return null;
        }
        //遍历得到左子树和右子树，将左右子树分别镜像。再交换位置整体镜像左右子树
        TreeNode left=mirrorTree(root.left);
        TreeNode right=mirrorTree(root.right);
        //左右子树分别已经镜像好了，把左右再整体镜像：root.left=right;root.right=left
        root.left=right;
        root.right=left;
        return root;
    }
}
